﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Data.Objects;
using SCEM.Manutencao;

namespace SCEM.DTO
{
    /// <summary>
    /// DTO de itens de histórico de manutenção.
    /// </summary>
    [DataContract]
    public class ItemHistoricoManutencaoDTO : IDTO<ItemHistoricoManutencao>
    {
        public ItemHistoricoManutencao ConvertToEntity(ObjectContext context)
        {
            ItemHistoricoManutencao itemHistorico = new ItemHistoricoManutencao();
            SCEMContainer scemContext = (SCEMContainer)context;
            Guid guid;

            // Verificar se o DTO representa uma entidade que já está persistida no banco e, em caso positivo, buscar ela no banco
            if (!String.IsNullOrEmpty(Id) && Guid.TryParse(Id, out guid))
            {
                var queryItem = from i in scemContext.ItensHistoricoManutencao 
                                where i.Id == guid
                                select i;

                if (queryItem.Count() == 1)
                    itemHistorico = queryItem.First();
            }

            // Tratar corretamente o caso de o DTO ser uma nova entidade a ser persistida no banco
            if (itemHistorico.Id == Guid.Empty)
            {
                itemHistorico.Id = Guid.NewGuid();
            }

            // DTO -> Entidade
            itemHistorico.TipoManutencao = (int)TipoManutencao;
            itemHistorico.DataManutencao = DataManutencao;
            itemHistorico.Descricao = Descricao;

            // Tratar o relacionamento ItemHistoricoManutencao - Equipamento caso necessário
            if (!(itemHistorico.Equipamento != null && itemHistorico.Equipamento.Id != null && itemHistorico.Equipamento.Id.ToString() == EquipamentoId)
                && Guid.TryParse(EquipamentoId, out guid))
            {
                var queryEquipamento = from e in scemContext.Equipamentos
                                       where e.Id == guid
                                       select e;
                if (queryEquipamento.Count() == 1)
                    itemHistorico.Equipamento =  queryEquipamento.First();
            }

            return itemHistorico;
        }

        [DataMember]
        public string Id { get; set; }

        [DataMember]
        public string EquipamentoId { get; set; }

        [DataMember]
        public TipoManutencao TipoManutencao { get; set; }

        [DataMember]
        public DateTime DataManutencao{ get; set; }

        [DataMember]
        public string Descricao { get; set; }

    }
}
